const Topic = require('../models/topics');
const User = require('../models/users');
const Question = require('../models/questions');

class TopicsCtl {
    //获取所有话题数据
    async find(ctx){
        const { per_page = 10 } = ctx.query;
        const page = Math.max(ctx.query.page * 1 - 1);
        const parPage = Math.max(per_page * 1, 1);
        ctx.body = await Topic.find({ name: new RegExp(ctx.query.q) })
        .limit(parPage).skip(page * parPage);
    }
    //检查话题是否存在
    async checkTopicExist(ctx, next){
        const topic = await Topic.findById(ctx.params.id);
        if(!topic){ ctx.throw(404, '话题不存在'); }
        await next();
    }
    //获取指定话题数据
    async findById(ctx){
        const { fields = '' } = ctx.query;
        const selectFields = fields.split(';').filter(f => f).map(f => ' +' + f).join('');
        const topic = await Topic.findById(ctx.params.id).select(selectFields);
        ctx.body = topic;
    }
    //创建话题
    async create(ctx){
        ctx.verifyParams({
            name:{ type:'string', required: true},
            avatra_url: { type:'string', required: false },
            introduction: { type: 'string', required: false },
        });
        const topic = await new Topic(ctx.request.body).save();
        ctx.body = topic;
    }
    //更新数据
    async update(ctx){
        ctx.verifyParams({
            name:{ type:'string', required: false},
            avatra_url: { type:'string', required: false },
            introduction: { type: 'string', required: false },
        });
        const topic = await Topic.findByIdAndUpdate(ctx.params.id, ctx.request.body);
        ctx.body = topic;
    }
    //获取话题粉丝
    async listFollowers(ctx) {
        const users = await User.find({ followingTopics: ctx.params.id });
        ctx.body = users;
    }
    //获取话题的问题列表
    async listQuestions(ctx) {
        const questions = await Question.find({ topics: ctx.params.id });
        ctx.body = questions;
    }
}

module.exports = new TopicsCtl();